package com.example.springblog.utils;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class SecurityUtils {
    /**
     * 对用户注册密码进行加密
     * @param password 用户注册密码
     * @return （盐值 + 密文）
     */
    public static String encipher(String password) {
        // 生成随机盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 将 明文 + 盐值 进行加密
        String secretPassword = DigestUtils.md5DigestAsHex((password + salt).getBytes());
        // 返回 盐值 + 密文
        return salt + secretPassword;
    }

    /**
     * 验证用户输入密码是否正确
     * @param inputPassword 用户登录时输入密码
     * @param sqlPassword 数据库中存储密码(盐值 + 密文)
     * @return
     */
    public static boolean verity (String inputPassword, String sqlPassword) {
        // 校验输入的密码
        if(!StringUtils.hasLength(inputPassword)) {
            return false;
        }
        // 校验数据库中存储密码
        if(!StringUtils.hasLength(inputPassword) || sqlPassword.length() != 64) {
            return false;
        }
        // 解析盐值
        String salt = sqlPassword.substring(0, 32);
        // 生成 哈希值
        String secretPassword = DigestUtils.md5DigestAsHex((inputPassword + salt).getBytes());
        // 判断密码是否正确
        return secretPassword.equals(sqlPassword.substring(32, 64));
    }
}
